<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="https://www.w3.org/1999/xhtml" lang="zh-CN" xml:lang="zh-CN">
<head><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    <title>6.50. Shadow-4.0.15</title>
    <link rel="stylesheet" href="../stylesheets/lfs.css" type="text/css" />
    <link rel="stylesheet" href="../stylesheets/lfs-print.css" type="text/css" media="print" />
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
  <body id="lfs" class="6.2">
    <div class="navheader">
      <div class="headertitles">
        <h4>Linux From Scratch - 版本 6.2</h4>
        <h3>第六章 安装系统基础软件</h3>
      </div>
      <ul class="headerlinks">
        <li class="prev">
          <a accesskey="p" href="psmisc.html" title="Psmisc-22.2">后退</a>
          <p>Psmisc-22.2</p>
        </li>
        <li class="next">
          <a accesskey="n" href="sysklogd.html" title="Sysklogd-1.4.1">前进</a>
          <p>Sysklogd-1.4.1</p>
        </li>
        <li class="up"><a accesskey="u" href="chapter06.html" title="第六章 安装系统基础软件">上一级</a></li>
        <li class="home"><a accesskey="h" href="../index.html" title="Linux From Scratch - 版本 6.2">首页</a></li>
      </ul>
    </div>
    <div class="wrap">
      <div class="titlepage">
        <h1 class="sect1">6.50. Shadow-4.0.15</h1>
      </div>
      <div class="package">
        <p>Shadow 包含用于在安全方式下处理密码的程序。</p>
        <div class="segmentedlist">
          <div class="seglistitem">
            <div class="seg">
              <strong><span class="segtitle">预计编译时间：</span></strong> <span class="seg">0.3 SBU</span>
            </div>
            <div class="seg">
              <strong><span class="segtitle">所需磁盘空间：</span></strong> <span class="seg">18.6 MB</span>
            </div>
          </div>
        </div>
      </div>
      <div class="installation">
        <div class="titlepage">
          <h2 class="sect2">6.50.1. 安装 Shadow</h2>
        </div>
        <div class="note">
          <div class="admonhead">
            <img alt="[Note]" src="../images/note.png" />
            <h3 class="admontitle">注意</h3>
          </div>
          <div class="admonbody">
            <p>如果你打算强制使用高强度密码，请参考 <a href="http://www.linuxfromscratch.org/blfs/view/svn/postlfs/cracklib.html"><i>http://www.linuxfromscratch.org/blfs/view/svn/postlfs/cracklib.html</i></a> 以获得如何在安装 Shadow 之前先安装 Cracklib 的指导。然后在下面的 <span><strong class="command">configure</strong></span> 命令中加入 <em class="parameter"><tt>--with-libcrack</tt></em> 项。</p>
          </div>
        </div>
        <p>为编译 Shadow 做准备：</p>
        <pre class="userinput"><kbd class="command">./configure --libdir=/lib --enable-shared --without-selinux</kbd></pre>
        <div class="variablelist">
          <p class="title">
            <b>配置选项的含义：</b></p>
          <dl>
            <dt>
              <span class="term"><em class="parameter"><tt>--without-selinux</tt></em></span>
            </dt>
            <dd>
              <p> selinux 的支持默认是打开的，但是 selinux 不包含在 LFS 基本系统中。如果这个选项不设置， <span><strong class="command">configure</strong></span> 脚本会报错。</p>
            </dd>
          </dl>
        </div>
        <p>禁止安装 <span><strong class="command">groups</strong></span> 程序和它的手册，Coreutils 软件包提供了一个更好的版本：</p>
        <pre class="userinput"><kbd class="command">sed -i 's/groups$(EXEEXT) //' src/Makefile
find man -name Makefile -exec sed -i '/groups/d' {} \;</kbd></pre>
        <p>禁止安装中文和韩文的手册页，因为Man-DB不能很好的格式化它们：</p>
        <pre class="userinput"><kbd class="command">sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile</kbd></pre>
        <p>Shadow 支持在 UTF-8 编码环境下的其他编码的手册。Man-DB 可以通过我们安装的 <span><strong class="command">convert-mans</strong></span> 脚本来转换并显示它们。</p>
        <pre class="userinput"><kbd class="command"> for i in de es fi fr id it pt_BR; do
    convert-mans UTF-8 ISO-8859-1 man/${i}/*.?
done

for i in cs hu pl; do
    convert-mans UTF-8 ISO-8859-2 man/${i}/*.?
done

convert-mans UTF-8 EUC-JP man/ja/*.?
convert-mans UTF-8 KOI8-R man/ru/*.?
convert-mans UTF-8 ISO-8859-9 man/tr/*.?</kbd></pre>
        <p>编译软件包：</p>
        <pre class="userinput"><kbd class="command">make</kbd></pre>
        <p>这个软件包没有附带测试程序。</p>
        <p>安装软件包：</p>
        <pre class="userinput"><kbd class="command">make install</kbd></pre>
        <p><a id="shadow-limits-login_access" name="shadow-limits-login_access"></a>Shadow 使用两个文件来设置系统的身份认证。下面安装这两个设置文件：</p>
        <pre class="userinput"><kbd class="command">cp -v etc/{limits,login.access} /etc</kbd></pre>
        <p><a id="shadow-login_defs" name="shadow-login_defs"></a>不使用默认的 <span class="emphasis"><em>crypt</em></span> 加密方法， 而使用更为安全的 <span class="emphasis"><em>MD5</em></span> 对密码进行加密， 并且它同样允许密码长于 8 个字符。同时将用户邮箱位置从过时的 <tt class="filename">/var/spool/mail</tt> 修改到 <tt class="filename">/var/mail</tt> 是也有必要的(Shadow 普遍默认使用这个位置)。这两件事都可以通过在将相应的配置文件复制至目标位置之前，对其进行更改来达到：</p>
        <pre class="userinput"><kbd class="command">sed -e's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
    -e 's@/var/spool/mail@/var/mail@' \
    etc/login.defs &gt; /etc/login.defs</kbd></pre>
        <div class="note">
          <div class="admonhead">
            <img alt="[Note]" src="../images/note.png" />
            <h3 class="admontitle">注意</h3>
          </div>
          <div class="admonbody">
            <p>如果你在编译 Shadow 时启用了 Cracklib 支持，请在下面的 <span><strong class="command">sed</strong></span> 命令中插入：</p>
            <pre class="userinput"><kbd class="command">sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' \
    /etc/login.defs</kbd></pre>
          </div>
        </div>
        <p>移动一些放错位置的符号连结或程序到正确位置：</p>
        <pre class="userinput"><kbd class="command">mv -v /usr/bin/passwd /bin</kbd></pre>
        <p>移动 Shadow 的动态库到一个更为合适的地方：</p>
        <pre class="userinput"><kbd class="command">mv -v /lib/libshadow.*a /usr/lib
rm -v /lib/libshadow.so
ln -sfv ../../lib/libshadow.so.0 /usr/lib/libshadow.so</kbd></pre>
        <p><span><strong class="command">useradd</strong></span> 程序的 <em class="parameter"><tt>-D</tt></em> 选项要求存在 <tt class="filename">/etc/default</tt> 目录以便程序能够正常工作：</p>
        <pre class="userinput"><kbd class="command">mkdir -v /etc/default</kbd></pre>
      </div>
      <div class="configuration">
        <div class="titlepage">
          <a id="conf-shadow" name="conf-shadow"></a>
          <h2 class="sect2">6.50.2. 配置 Shadow</h2>
        </div>
        <p>这个软件包中含有用来增加、修改和删除用户或组、设置和更改他们的密码、和执行其他管理任务的工具。为了获得对 <span class="emphasis"><em>password shadowing (影子密码)</em></span> 的完全解释，请参见 <tt class="filename">doc/HOWTO</tt> 文件，它在解包后的源码目录树中。假如要使用 Shadow 支持，请注意那些需要对密码进行校验的程序(如显示管理器、FTP 程序、pop3进程等)必须兼容 Shadow 。也就是说，他们需要能够与影子密码一起工作。</p>
        <p>为了使用影子密码，运行以下指令：</p>
        <pre class="userinput"><kbd class="command">pwconv</kbd></pre>
        <p>为使用组影子密码，运行：</p>
        <pre class="userinput"><kbd class="command">grpconv</kbd></pre>
      </div>
      <div class="configuration">
        <div class="titlepage">
          <h2 class="sect2">6.50.3. Setting the root password</h2>
        </div>
        <p>通过运行以下命令来设置 <span class="emphasis"><em>root</em></span> 用户的密码：</p>
        <pre class="userinput"><kbd class="command">passwd root</kbd></pre>
      </div>
      <div class="content">
        <div class="titlepage">
          <a id="contents-shadow" name="contents-shadow"></a>
          <h2 class="sect2">6.50.4. Shadow 的内容</h2>
        </div>
        <div class="segmentedlist">
          <div class="seglistitem">
            <div class="seg">
              <strong><span class="segtitle">安装的程序：</span></strong> <span class="seg">chage, chfn,
              chgpasswd, chpasswd, chsh, expiry, faillog, gpasswd, groupadd,
              groupdel, groupmod, grpck, grpconv, grpunconv, lastlog, login,
              logoutd, newgrp, newusers, nologin, passwd, pwck, pwconv,
              pwunconv, sg(→newgrp), su, useradd, userdel, usermod,
              vigr(→vipw), vipw</span>
            </div>
            <div class="seg">
              <strong><span class="segtitle">安装的库：</span></strong> <span class="seg">libshadow.{a,so}</span>
            </div>
          </div>
        </div>
        <div class="variablelist">
          <h3><a id="id3693797" name="id3693797"></a>简要描述</h3>
          <table border="0">
            <col align="left" valign="top" />
            <tbody>
              <tr>
                <td><a id="chage" name="chage"></a><span class="term"><span><strong class="command">chage</strong></span></span></td>
                <td><p>用于设置必须对密码进行更改的最大间隔天数</p></td>
              </tr>
              <tr>
                <td><a id="chfn" name="chfn"></a><span class="term"><span><strong class="command">chfn</strong></span></span></td>
                <td><p>用于对用户的全名及其他信息进行修改</p></td>
              </tr>
              <tr>
                <td><a id="chgpasswd" name="chgpasswd"></a><span class="term"><span><strong class="command">chgpasswd</strong></span></span></td>
                <td><p>用于对一整个系列的组账号密码进行更新</p></td>
              </tr>
              <tr>
                <td><a id="chpasswd" name="chpasswd"></a><span class="term"><span><strong class="command">chpasswd</strong></span></span></td>
                <td><p>用于对一整个系列的用户账号密码进行更新</p></td>
              </tr>
              <tr>
                <td><a id="chsh" name="chsh"></a><span class="term"><span><strong class="command">chsh</strong></span></span></td>
                <td><p>用于更改一个用户的默认的登录 shell</p></td>
              </tr>
              <tr>
                <td><a id="expiry" name="expiry"></a><span class="term"><span><strong class="command">expiry</strong></span></span></td>
                <td><p>检查并加强当前的密码过期策略</p></td>
              </tr>
              <tr>
                <td><a id="faillog" name="faillog"></a><span class="term"><span><strong class="command">faillog</strong></span></span></td>
                <td><p>用于检查记录登录失败的日志，或是设置账户在被锁定前最大的登录失败次数，亦可用于重置登录失败的次数。</p></td>
              </tr>
              <tr>
                <td><a id="gpasswd" name="gpasswd"></a><span class="term"><span><strong class="command">gpasswd</strong></span></span></td>
                <td><p>用来增加和删除组中的成员和管理员</p></td>
              </tr>
              <tr>
                <td><a id="groupadd" name="groupadd"></a><span class="term"><span><strong class="command">groupadd</strong></span></span></td>
                <td><p>用指定的名称建一个组</p></td>
              </tr>
              <tr>
                <td><a id="groupdel" name="groupdel"></a><span class="term"><span><strong class="command">groupdel</strong></span></span></td>
                <td><p>删除指定名称的组</p></td>
              </tr>
              <tr>
                <td><a id="groupmod" name="groupmod"></a><span class="term"><span><strong class="command">groupmod</strong></span></span></td>
                <td><p>用来修改所指定组的名称或 GID</p></td>
              </tr>
              <tr>
                <td><a id="grpck" name="grpck"></a><span class="term"><span><strong class="command">grpck</strong></span></span></td>
                <td><p>校验组文件 <tt class="filename">/etc/group</tt> 和 <tt class="filename">/etc/gshadow</tt> 的完整性</p></td>
              </tr>
              <tr>
                <td><a id="grpconv" name="grpconv"></a><span class="term"><span><strong class="command">grpconv</strong></span></span></td>
                <td><p>从正常组文件中创建或更新一影子组文件</p></td>
              </tr>
              <tr>
                <td><a id="grpunconv" name="grpunconv"></a><span class="term"><span><strong class="command">grpunconv</strong></span></span></td>
                <td><p>从 <tt class="filename">/etc/gshadow</tt> 更新 <tt class="filename">/etc/group</tt> 并将前者删除</p></td>
              </tr>
              <tr>
                <td><a id="lastlog" name="lastlog"></a><span class="term"><span><strong class="command">lastlog</strong></span></span></td>
                <td><p>报告最近的所有用户的登录或是所指定用户的登录</p></td>
              </tr>
              <tr>
                <td><a id="login" name="login"></a><span class="term"><span><strong class="command">login</strong></span></span></td>
                <td><p>被系统用来允许用户进行登录</p></td>
              </tr>
              <tr>
                <td><a id="logoutd" name="logoutd"></a><span class="term"><span><strong class="command">logoutd</strong></span></span></td>
                <td><p>一个后台程序，用来加强对登录时间和端口进行限制</p></td>
              </tr>
              <tr>
                <td><a id="newgrp" name="newgrp"></a><span class="term"><span><strong class="command">newgrp</strong></span></span></td>
                <td><p>用来在登录会话期间对当前的 GID 进行修改</p></td>
              </tr>
              <tr>
                <td><a id="newusers" name="newusers"></a><span class="term"><span><strong class="command">newusers</strong></span></span></td>
                <td><p>用来对一整个系列的用户账户进行创建或更新</p></td>
              </tr>
              <tr>
                <td><a id="nologin" name="nologin"></a><span class="term"><span><strong class="command">nologin</strong></span></span></td>
                <td><p>显示一个账户不可用的信息，被设计用来作为那些不准登录的账户的默认 shell。</p></td>
              </tr>
              <tr>
                <td><a id="passwd" name="passwd"></a><span class="term"><span><strong class="command">passwd</strong></span></span></td>
                <td><p>用来对一个用户或组账户进行密码修改</p></td>
              </tr>
              <tr>
                <td><a id="pwck" name="pwck"></a><span class="term"><span><strong class="command">pwck</strong></span></span></td>
                <td><p>校验密码文件 <tt class="filename">/etc/passwd</tt> 和 <tt class="filename">/etc/shadow</tt> 的完整性</p></td>
              </tr>
              <tr>
                <td><a id="pwconv" name="pwconv"></a><span class="term"><span><strong class="command">pwconv</strong></span></span></td>
                <td><p>从一个正常的密码文件中创建或更新一影子密码文件</p></td>
              </tr>
              <tr>
                <td><a id="pwunconv" name="pwunconv"></a><span class="term"><span><strong class="command">pwunconv</strong></span></span></td>
                <td><p>从 <tt class="filename">/etc/shadow</tt> 更新 <tt class="filename">/etc/passwd</tt> 并删除前者</p></td>
              </tr>
              <tr>
                <td><a id="sg" name="sg"></a><span class="term"><span><strong class="command">sg</strong></span></span></td>
                <td><p>当一个用户的 GID 被设置到所给的组时执行所指定的命令</p></td>
              </tr>
              <tr>
                <td><a id="su" name="su"></a><span class="term"><span><strong class="command">su</strong></span></span></td>
                <td><p>用另一个用户和组ID来运行一个 shell</p></td>
              </tr>
              <tr>
                <td><a id="useradd" name="useradd"></a><span class="term"><span><strong class="command">useradd</strong></span></span></td>
                <td><p>用所给名称建立一个新的用户或更新默认新用户的信息</p></td>
              </tr>
              <tr>
                <td><a id="userdel" name="userdel"></a><span class="term"><span><strong class="command">userdel</strong></span></span></td>
                <td><p>删除所指定的用户账户</p></td>
              </tr>
              <tr>
                <td><a id="usermod" name="usermod"></a><span class="term"><span><strong class="command">usermod</strong></span></span></td>
                <td><p>用来更改所给用户的登录名、用户标识(UID)、shell、最初组、主目录等</p></td>
              </tr>
              <tr>
                <td><a id="vigr" name="vigr"></a><span class="term"><span><strong class="command">vigr</strong></span></span></td>
                <td><p>编辑 <tt class="filename">/etc/group</tt> 或 <tt class="filename">/etc/gshadow</tt> 文件</p></td>
              </tr>
              <tr>
                <td><a id="vipw" name="vipw"></a><span class="term"><span><strong class="command">vipw</strong></span></span></td>
                <td><p>编辑 <tt class="filename">/etc/passwd</tt> 或 <tt class="filename">/etc/shadow</tt> 文件</p></td>
              </tr>
              <tr>
                <td><a id="libshadow" name="libshadow"></a><span class="term"><tt class="filename">libshadow</tt></span></td>
                <td><p>包含了本包中大部分程序所用到的函数</p></td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
    </div>
    <div class="navfooter">
      <ul>
        <li class="prev">
          <a accesskey="p" href="psmisc.html" title="Psmisc-22.2">后退</a>
          <p>Psmisc-22.2</p>
        </li>
        <li class="next">
          <a accesskey="n" href="sysklogd.html" title="Sysklogd-1.4.1">前进</a>
          <p>Sysklogd-1.4.1</p>
        </li>
        <li class="up"><a accesskey="u" href="chapter06.html" title="第六章 安装系统基础软件">上一级</a></li>
        <li class="home"><a accesskey="h" href="../index.html" title="Linux From Scratch - 版本 6.2">首页</a>.
        </li>
      </ul>
    </div>
</body></html>
